<?php
/**

 //  The DoYouHaoBaby PHP FrameWork - wedoit
 //  +---------------------------------------------------------------------
 //
 //  “Copyright”
 //  +---------------------------------------------------------------------
 //  | (C) 2010 - 2099 http://doyouhaobaby.net All rights reserved.
 //  | This is not a free software,use is subject to license terms
 //  +---------------------------------------------------------------------
 //
 //  “About This File”
 //  +---------------------------------------------------------------------
 //  | wedoit User控制器
 //  +---------------------------------------------------------------------

*/

!defined('DYHB_PATH') && exit;

class UserController extends InitController{

	/**
	 * 注册一个用户
	 */
	public function register(){
		// 判断是否已经登录
		if($GLOBALS['___login___']!==false){
			$this->E('你已经是注册会员。');
		}

		$this->display();
	}

	/**
	 * 注册一个用户
	 */
	public function insert(){
		// 判断是否已经登录
		if($GLOBALS['___login___']!==false){
			$this->E('你已经是注册会员。');
		}

		// 创建模型
		$oModel=new UserModel();

		// 保存数据
		$oModel->save();

		// 开始查找错误
		if(!$oModel->isError()){
			$this->assign('__JumpUrl__',Dyhb::U('index/index'));
			$this->S('数据保存成功！');
		}else{
			$this->E($oModel->getErrorMessage());
		}
	}

	/**
	 * 登录
	 */
	public function login(){
		// 判断是否已经登录
		if($GLOBALS['___login___']!==false){
			$this->E('你已经登录过了。');
		}

		$this->display();
	}

	/**
	 * 登录验证
	 */
	public function check_login(){
		// 取得登录用户信息
		$sUserName=G::getGpc('user_name','P');
		$sPassword=G::getGpc('user_password','P');

		// 账号不能为空
		if(empty($sUserName)){
			$this->E('帐号或者E-mail不能为空！');
		}elseif (empty($sPassword)){
			$this->E('密码不能为空！');
		}

		// 检测是E-mail登录验证，还是帐号
		// 启动日常验证检测程序
		Check::RUN();
		if(Check::C($sUserName,'email')){
			$bEmail=true;
			unset($_POST['user_name']);
		}else{
			$bEmail=false;
		}

		// 登录验证
		// 这里还有一个参数为是否自动更新登录信息，默认开启
		// Rbac行为插件中的checkLogin($sUsername,$sPassword,$bEmail=false,$bUpdateLogin=true)
		$oUser=UserModel::M()->checkLogin($sUserName,$sPassword,$bEmail);

		// 尝试获取行为插件验证错误消息，没有错误，表示验证通过
		if(UserModel::M()->isBehaviorError()){
			$this->E (UserModel::M()->getBehaviorErrorMessage());
		}else{
			// 开始模型中的错误，如果没有那么路过
			if($oUser->isError()){
				$this->E($oUser->getErrorMessage());
			}

			Dyhb::cookie('user_login',$oUser->toArray());
			$this->assign('__JumpUrl__',Dyhb::U('index/index'));
			$this->assign('__WaitSecond__',3);

			// 刚开始我们无法获取数据，因为刚开始验证完毕后，程序尚未从数据库获取用户登录信息
			// 这里可以使用$arrUserData=$oUser->userData() 获取数据
			// 同样也可以使用$arrUserData=UserModel->userData()
			// 还可以直接使用全局变量,$arrUserData=$GLOBALS[ Dyhb::cookie[ G::C('RBAC_DATA_PREFIX').'authkey' ] ];
			$this->S(sprintf('Hello %s,你成功登录！',$sUserName));
		}
	}

	/**
	 * 登出
	 */
	public function logout(){
		if($GLOBALS['___login___']!==false){
			Dyhb::cookie('user_login',null,CURRENT_TIMESTAMP-8640000);
			$this->assign('__JumpUrl__',Dyhb::U('user/login'));
			$this->S('登出成功');
		}else{
			$this->E('你已经登出');
		}
	}

	public function change_password(){
		// 判断是否已经登录
		if($GLOBALS['___login___']===false){
			$this->E('你没有登录');
		}

		$this->display();
	}

	public function change_the_password(){
		// 判断是否已经登录
		if($GLOBALS['___login___']===false){
			$this->E('你没有登录');
		}

		// 取得已经登录后的用户信息
		$arrUserData=$GLOBALS['___login___'];

		// 取得用户相关信息
		$sPassword=G::getGpc('user_password','P');
		$sNewPassword=G::getGpc('new_password','P');
		$sOldPassword=G::getGpc('old_password','P');

		if($sOldPassword==''){
			$this->E('旧密码不能为空');
		}

		if($sPassword==''){
			$this->E('新密码不能为空');
		}

		if($sPassword!=$sNewPassword){
			$this->E('两次输入的密码不一致');
		}

		if(strlen($sNewPassword)<6){
			$this->E('密码不能少于 6 个字符');
		}

		// 修改密码
		UserModel::M()->changePassword($arrUserData['user_name'],$sPassword,$sOldPassword);

		// 捕获行为插件中的错误
		if(UserModel::M()->isBehaviorError()){
			$this->E(UserModel::M()->getBehaviorErrorMessage());
		}else{
			// 取得用户模型
			$oUser=UserModel::F('user_id=?',$arrUserData['user_id'])->query();

			// 捕获错误
			if($oUser->isError()){
		 		$this->E($oUser->getErrorMessage());
			}

			Dyhb::cookie('user_login',null,CURRENT_TIMESTAMP-8640000);

			$this->assign('__JumpUrl__',Dyhb::U('user/login'));
			$this->S('密码修改成功，你需要重新登录！');
		}
	}

}
